SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO


CREATE PROC [dbo].[SP_TXMVTO_CNTB_Q50]                      
/*-------------------------------------------------------------------*/                      
/*----- Empresa           : OFISIS S.A.                          ----*/                      
/*----- Cliente           : OFISIS S.A.                          ----*/                      
/*----- Sistema           : Contabilidad                         ----*/                      
/*----- Modulo            : Empresa                              ----*/                      
/*----- Programa          : GENERACION ARCHIVO TEXTO OMITIENDO    
LOS ASIENTOS DE DIFERENCIA DE CAMBIO                            ----*/                      
/*----- Nombre            : SP_TXMVTO_CNTB_Q50                   ----*/                      
/*----- Script            : TXMVTO_CNTB                          ----*/                      
/*----- Desarrollado por  : PERCY GARCIA                          ----*/                      
/*----- Fecha             : 24/02/2009                           ----*/                      
/*----- Base de Datos     : MS SQL Server                        ----*/                      
/*----- Version BD        : 2000                                 ----*/                      
/*-------------------------------------------------------------------*/                      
/*---- Modificado 1 por     : RCALDAS                            ----*/                        
/*---- Fecha Modificaci?n   :24/03/2009                          ----*/                            
/*---- Detalle Modificaci?n :Redactado en el MEMO M_2009_03_20A  ----*/                          
/*-------------------------------------------------------------------*/                      
/*----- Drop proc SP_TXMVTO_CNTB_Q50                             ----*/                      
/*----- Grant all on SP_TXMVTO_CNTB_Q50 to PUBLIC                ----*/                      
/*-----       
EXEC SP_TXMVTO_CNTB_Q50 '01', 1, 2008, 12, NULL,' '      
----*/                      
/*-------------------------------------------------------------------*/                    
@ISCO_EMPR TD_VC_002,                      
@INNU_CNTB_EMPR TD_IN_001_CONT,                      
@INNU_ANNO TD_IN_004_ANNO,                      
@INNU_MESE TD_IN_002_MESE,      
@ISCA_WHER_LOCA Varchar(8000),      
@INFA_CAMB TD_NU_015_006      
      
      
As                  
Declare      
@VSNU_CNTB_EMPR TD_VC_010,      
@VSNU_ANNO TD_VC_010,      
@VSNU_MESE TD_VC_010,    
@CSCO_UNID_CNTB TD_VC_003,     
@CSCO_OPRC_CNTB TD_VC_003,     
@CSNU_ASTO TD_VC_020,    
@CNNU_REGI_SOLE INT,    
@CNNU_REGI_DOLE INT,    
@CNNU_SECU INT,
@CNFA_CAMB_DIAR NUMERIC(16,6),
@VNFA_CAMB_TOTA NUMERIC(16,6),
@CDFE_ASTO_CNTB DATETIME   
      
                      
Create Table #TWASTO_EPBR      
(      
TI_DOCU Varchar(3) NULL,      
CO_EMPR Varchar(2) NULL,      
NU_ANNO Varchar(4) NULL,    
NU_MESE varchar (2) NULL,    
CO_CNTA_EMPR Varchar(20) NULL,      
CO_OPRC_CNTB Varchar(3) NULL,      
CO_UNID_CNTB Varchar(3) NULL,      
NU_ASTO Varchar(10) NULL,      
NU_SECU Numeric(18) NULL,      
NU_SECU_0001 Numeric(18) NULL,      
FE_ASTO_CNTB DateTime NULL,      
FE_DOCU DateTime NULL,      
CO_MONE Varchar(3) NULL,      
TI_OPER Varchar(3) NULL,      
TI_AUXI_EMPR Varchar(1) NULL,      
CO_AUXI_EMPR Varchar(20) NULL,      
IM_MVTO_ORIG Numeric(16,4) NULL,      
IM_MVTO_CNTB Numeric(16,4) NULL,      
DE_GLOS Varchar(100) NULL,      
NO_DOCU Varchar(100) NULL,    
CO_MONE_ARCH Varchar(3) NULL,    
IM_MVTO_CLPS Numeric(16,4) NULL,    
ST_MVTO_CONV VARCHAR(4) NULL,    
FA_CAMB_DIAR Numeric(15,6) NULL    
)                                  
      
--SE CREO LA COLUMNA IM_MVTO_CLP PARA GUARDAR EL IMPORTE CONVERTIDO     
--CUANDO HAY MAS DE 2 MONEDAS EN UN ASIENTO CONTABLE    
    
Create Table #TWSECU_EPBR      
(      
CO_OPRC_CNTB Varchar(3) NULL,      
CO_UNID_CNTB Varchar(3) NULL,     
NU_ASTO Varchar(10) NULL,      
NU_SECU NUMERIC(18) IDENTITY       
)      
      
CREATE INDEX [#ITWASTO_EPBR_01] ON [dbo].[#TWASTO_EPBR] (CO_OPRC_CNTB)      
WITH FILLFACTOR = 80      
ON [PRIMARY]      
      
CREATE INDEX [#ITWASTO_EPBR_02] ON [dbo].[#TWASTO_EPBR] (NU_ASTO)      
WITH FILLFACTOR = 80      
ON [PRIMARY]      
      
      
Select @VSNU_CNTB_EMPR = Convert(Varchar, @INNU_CNTB_EMPR)                        
Select @VSNU_ANNO = Convert(Varchar, @INNU_ANNO)                        
Select @VSNU_MESE = Convert(Varchar, @INNU_MESE)                        
      
      
Exec('Insert Into #TWASTO_EPBR(TI_DOCU,CO_EMPR,CO_CNTA_EMPR,CO_OPRC_CNTB,CO_UNID_CNTB,      
NU_ASTO,NU_SECU,FE_ASTO_CNTB,FE_DOCU,CO_MONE,TI_OPER,TI_AUXI_EMPR,CO_AUXI_EMPR,      
IM_MVTO_ORIG,IM_MVTO_CNTB,DE_GLOS,NO_DOCU,NU_ANNO,NU_MESE,FA_CAMB_DIAR)   
                
Select t1.TI_DOCU,t1.CO_EMPR,t1.CO_CNTA_EMPR,t1.CO_OPRC_CNTB,t1.CO_UNID_CNTB,      
t1.NU_ASTO,t1.NU_SECU,t1.FE_ASTO_CNTB,t1.FE_DOCU,t1.CO_MONE,t1.TI_OPER,    
t1.TI_AUXI_EMPR,t1.CO_AUXI_EMPR,      
t1.IM_MVTO_ORIG,t1.IM_MVTO_CNTB,REPLACE(REPLACE(REPLACE(t1.DE_GLOS, CHAR(13), ""), CHAR(10), ""), "|", ""),      
REPLACE(REPLACE(REPLACE(t2.NO_DOCU,CHAR(13), ""), CHAR(10), ""), "|", ""),    
t1.NU_ANNO, t1.NU_MESE, t1.FA_CAMB_DIAR      
From TXMVTO_CNTB t1  LEFT OUTER JOIN TTDOCU_CNTB t2 ON (t2.TI_DOCU = t1.TI_DOCU)      
Where t1.CO_EMPR = "' + @ISCO_EMPR + '"      
And t1.NU_CNTB_EMPR = ' + @INNU_CNTB_EMPR + '       
And t1.NU_ANNO = ' + @VSNU_ANNO + '      
And t1.NU_MESE = ' + @VSNU_MESE + '  '+ @ISCA_WHER_LOCA +'    
And t1.SI_MVTO_CNTB = "APR"     
And t1.ST_GEST="N"    
AND  NOT EXISTS (SELECT T2.CO_EMPR    
FROM TXMVTO_CNTB T2 WHERE T1.CO_EMPR=T2.CO_EMPR    
AND  T1.NU_CNTB_EMPR = T2.NU_CNTB_EMPR    
AND  T1.CO_UNID_CNTB = T2.CO_UNID_CNTB    
AND  T1.CO_OPRC_CNTB = T2.CO_OPRC_CNTB    
AND  T1.NU_ANNO = T2.NU_ANNO    
AND  T1.NU_MESE = T2.NU_MESE    
AND  T1.NU_ASTO = T2.NU_ASTO    
AND  T2.ST_DIFE_CAMB ="S")  
AND  T1.CO_OPRC_CNTB NOT IN (SELECT T3.CO_OPRC_CNTB      
			FROM 	TTIDEN_OPER T3 
			WHERE 	T3.CO_EMPR = "' + @ISCO_EMPR + '"
			AND  	T3.NU_CNTB_EMPR = ' + @INNU_CNTB_EMPR + '
			AND  	T3.ID_OPRC = "032")
AND  NOT EXISTS (SELECT T2.CO_EMPR    
FROM TXMVTO_CNTB T2 WHERE T1.CO_EMPR=T2.CO_EMPR    
AND  T1.NU_CNTB_EMPR = T2.NU_CNTB_EMPR    
AND  T1.CO_UNID_CNTB = T2.CO_UNID_CNTB    
AND  T1.CO_OPRC_CNTB = T2.CO_OPRC_CNTB    
AND  T1.NU_ANNO = T2.NU_ANNO    
AND  T1.NU_MESE = T2.NU_MESE    
AND  T1.NU_ASTO = T2.NU_ASTO    
AND  left(T2.CO_CNTA_EMPR,2)IN ("33","39"))')
  
--REEMPLAZADO
/*AND  NOT EXISTS (SELECT T2.CO_EMPR    
FROM TXMVTO_CNTB T2 WHERE T1.CO_EMPR=T2.CO_EMPR    
AND  T1.NU_CNTB_EMPR = T2.NU_CNTB_EMPR    
AND  T1.CO_UNID_CNTB = T2.CO_UNID_CNTB    
AND  T1.CO_OPRC_CNTB = T2.CO_OPRC_CNTB    
AND  T1.NU_ANNO = T2.NU_ANNO    
AND  T1.NU_MESE = T2.NU_MESE    
AND  T1.NU_ASTO = T2.NU_ASTO    
AND  left(T2.CO_CNTA_EMPR,2)IN ("21","24","26","33","39"))')      */
      
--OBTENEMOS LOS ASIENTOS A LOS CUALES SE LE TIENE QUE REALIZAR LA CONVERSI?N A     
--DOLARES    
    
Declare SP_TXMVTO_CNTB_Q50_1 Cursor  FOR    
SELECT DISTINCT CO_UNID_CNTB,CO_OPRC_CNTB,NU_ASTO,NU_SECU,FA_CAMB_DIAR,FE_ASTO_CNTB   
FROM #TWASTO_EPBR    
ORDER BY CO_UNID_CNTB,CO_OPRC_CNTB,NU_ASTO,NU_SECU,FE_ASTO_CNTB,FA_CAMB_DIAR    
    
 Open SP_TXMVTO_CNTB_Q50_1      
 Fetch SP_TXMVTO_CNTB_Q50_1 Into @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSNU_ASTO,@CNNU_SECU,
 @CNFA_CAMB_DIAR,@CDFE_ASTO_CNTB   

SELECT @CNFA_CAMB_DIAR=0 
While @@Fetch_status = 0      
 Begin      
  --INICIALLIZANDO VARIABLES    
  SELECT @CNNU_REGI_SOLE=0, @CNNU_REGI_DOLE=0    
    
  SELECT @CNNU_REGI_SOLE=COUNT(*)     
                FROM #TWASTO_EPBR    
  WHERE CO_UNID_CNTB=@CSCO_UNID_CNTB    
  AND CO_OPRC_CNTB=@CSCO_OPRC_CNTB    
  AND NU_ASTO=@CSNU_ASTO    
  AND CO_MONE='SOL'    
    
    
  SELECT @CNNU_REGI_DOLE=COUNT(*)     
                FROM #TWASTO_EPBR    
  WHERE CO_UNID_CNTB=@CSCO_UNID_CNTB    
  AND CO_OPRC_CNTB=@CSCO_OPRC_CNTB    
  AND NU_ASTO=@CSNU_ASTO    
  AND CO_MONE='DOL'    
    
SELECT @VNFA_CAMB_TOTA=0

IF @CNFA_CAMB_DIAR!=1 BEGIN
	SELECT @VNFA_CAMB_TOTA =@CNFA_CAMB_DIAR  END
ELSE BEGIN
	SELECT @VNFA_CAMB_TOTA=FA_VNTA_OFIC FROM TCFACT_CAMB 
	WHERE CO_MONE_BASE='SOL'
	AND CO_MONE='DOL' AND FE_CAMB=@CDFE_ASTO_CNTB
END


  IF @CNNU_REGI_SOLE > 0 AND @CNNU_REGI_DOLE > 0 BEGIN    
   UPDATE #TWASTO_EPBR SET ST_MVTO_CONV ='SOLE'    
                 WHERE CO_UNID_CNTB=@CSCO_UNID_CNTB 
   AND CO_OPRC_CNTB=@CSCO_OPRC_CNTB    
   AND NU_ASTO=@CSNU_ASTO    
   AND NU_SECU = @CNNU_SECU   
   AND CO_MONE='SOL'    
    
	   UPDATE T1 SET IM_MVTO_CLPS =(ROUND(ISNULL(IM_MVTO_CNTB,0)/@VNFA_CAMB_TOTA,2)),    
	   CO_MONE_ARCH='USD'    
	   FROM #TWASTO_EPBR T1    
	   WHERE 
	   T1.CO_UNID_CNTB = @CSCO_UNID_CNTB    
	   AND T1.CO_OPRC_CNTB = @CSCO_OPRC_CNTB    
	   AND T1.NU_ASTO = @CSNU_ASTO    
	   AND T1.NU_SECU = @CNNU_SECU    
	   AND T1.CO_MONE = 'SOL'    
           AND T1.ST_MVTO_CONV ='SOLE'    
  END     
    
    
   Fetch SP_TXMVTO_CNTB_Q50_1 Into @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSNU_ASTO,
   @CNNU_SECU,@CNFA_CAMB_DIAR, @CDFE_ASTO_CNTB    
  End      
       
 Close SP_TXMVTO_CNTB_Q50_1      
 Deallocate  SP_TXMVTO_CNTB_Q50_1     
    
    
    
    
--FIN     
    
--- GENERA UN CORRELATIVO DE LOS ASIENTOS       
Insert Into #TWSECU_EPBR(CO_OPRC_CNTB,CO_UNID_CNTB,NU_ASTO)      
Select t1.CO_OPRC_CNTB,t1.CO_UNID_CNTB,t1.NU_ASTO      
From #TWASTO_EPBR t1      
Group By t1.CO_OPRC_CNTB,t1.CO_UNID_CNTB,t1.NU_ASTO      
Order By 1,2,3      
      
Update #TWASTO_EPBR      
Set NU_SECU_0001 = t2.NU_SECU      
From #TWASTO_EPBR t1, #TWSECU_EPBR t2      
Where t2.CO_OPRC_CNTB = t1.CO_OPRC_CNTB      
And t2.CO_UNID_CNTB = t1.CO_UNID_CNTB      
And t2.NU_ASTO = t1.NU_ASTO      
      
---- ARMA ARCHIVO                     
---('X')       
If @INFA_CAMB IS NULL      
--- CSO MES 1 AL 12      
Begin       
Select       
CASE WHEN LEN(RIGHT(t1.CO_OPRC_CNTB,2))=1 THEN '0'+RIGHT(t1.CO_OPRC_CNTB,2)    
ELSE RIGHT(t1.CO_OPRC_CNTB,2) END + RIGHT(t1.NU_ASTO, 4) + CASE WHEN LEN (Convert(Varchar,MONTH(t1.FE_ASTO_CNTB),105))=1 THEN    
               '0'+IsNull(Convert(Varchar,MONTH(t1.FE_ASTO_CNTB),105),'')ELSE    
               IsNull(Convert(Varchar,MONTH(t1.FE_ASTO_CNTB),105),'') END        
+ '|' + REPLICATE('0', 4 - Len(LEFT(Convert(Varchar,t1.NU_SECU_0001),4)))  + LEFT(Convert(Varchar,t1.NU_SECU_0001),4)      
+ '|' +'A002'       
+ '|' +'EX'       
+ '|' + IsNull(Convert(Varchar,t1.FE_DOCU,105),'')    
+ '|' + IsNull(Convert(Varchar,t1.FE_ASTO_CNTB,105),'')        
+ '|' + (CASE WHEN t1.ST_MVTO_CONV='SOLE' THEN t1.CO_MONE_ARCH ELSE    
(Case When t1.CO_MONE = 'DOL' Then 'USD' When t1.CO_MONE = 'SOL' Then 'PEN' Else '' End)End )       
+ '|' + IsNull(SubString(t1.NO_DOCU,1,16),'')       
+ '|' + IsNull(SubString(t1.NO_DOCU,17,25),'')       
+ '|' + (Case When t1.TI_OPER = 'CAR' Then '40' Else '50' End)      
+ '|' +       
+ '|' + (Rtrim(IsNull(LEFT(t3.CO_CNTA_CORP, 10), '')))
+ '|' +       
+ '|' +       
+ '|' + (Case When t1.TI_AUXI_EMPR In       
(Select TI_AUXI_EMPR From TTTIPO_CCOS Where CO_EMPR = @ISCO_EMPR) Then       
'300'+Substring(IsNull(t1.CO_AUXI_EMPR, ''),1,5)      
   Else ''      
End)      
+ '|' +       
+ '|' +       
+ '|' +       
+ '|' + 
(CASE WHEN t1.ST_MVTO_CONV='SOLE' THEN 
REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_CLPS)), '.', ',')    
ELSE REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_ORIG)), '.', ',') END)   
+ '|' + (Case When t1.CO_MONE In ('SOL','DOL') Then REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_CNTB)), '.', ',')       
Else '' End)       
+ '|' + 
(CASE WHEN ST_MVTO_CONV='SOLE' THEN REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_CLPS)), '.', ',')    
ELSE (Case When t1.CO_MONE = 'DOL' Then LEFT(REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_ORIG)), '.', ','),13)      
Else '' End)  END )   
+ '|' + (Case When t1.TI_AUXI_EMPR In ('C', 'P') Then       
Substring(IsNull(t1.CO_AUXI_EMPR, ''),1,18)       
   Else ''      
End)      
+ '|' +       
+ '|' +       
+ '|' + RTRIM(LTRIM(LEFT(IsNull(t1.DE_GLOS,''),50)))      
+ '|'+ '|'
From #TWASTO_EPBR t1 LEFT OUTER JOIN TMPLAN_ANNO t3 ON (t3.CO_EMPR = t1.CO_EMPR And t3.CO_CNTA_EMPR = t1.CO_CNTA_EMPR)      
Order By t1.CO_OPRC_CNTB,t1.CO_UNID_CNTB,t1.NU_ASTO,t1.NU_SECU,t1.NU_SECU_0001      
End      
      
Else       
      
Begin       
--- CASO MES CERO       
      
Select       
  ' '    
+ '|' + REPLICATE('0', 4 - Len(LEFT(Convert(Varchar,t1.NU_SECU_0001),4)))  + LEFT(Convert(Varchar,t1.NU_SECU_0001),4)      
+ '|' +'A002'       
+ '|' +'SA'      
+ '|' + IsNull(Convert(Varchar,t1.FE_DOCU,105),'')     
+ '|' + IsNull(Convert(Varchar,t1.FE_ASTO_CNTB,105),'')      
+ '|' + (Case When t1.CO_MONE = 'DOL' Then 'USD' When t1.CO_MONE = 'SOL' Then 'PEN' Else '' End)       
+ '|' + IsNull(SubString(t1.NO_DOCU,1,16),'')       
+ '|' + IsNull(SubString(t1.NO_DOCU,17,25),'')      
+ '|' + (Case When t1.TI_OPER = 'CAR' Then '40' Else '50' End)      
+ '|' +       
+ '|' +  Rtrim(IsNull(LEFT(t3.CO_CNTA_CORP, 10), ''))    
+ '|' +       
+ '|' +       
+ '|' + (Case When t1.TI_AUXI_EMPR In       
(Select TI_AUXI_EMPR From TTTIPO_CCOS Where CO_EMPR = @ISCO_EMPR) Then       
'300'+Substring(IsNull(t1.CO_AUXI_EMPR, ''),1,5)      
   Else ''      
End)      
+ '|' +       
+ '|' +       
+ '|' +       
+ '|' + REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_ORIG)), '.', '')       
+ '|' + (Case When t1.CO_MONE In ('SOL','DOL') Then REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_CNTB)), '.', '')       
Else ''      
End)       
+ '|' + (---Case When t1.CO_MONE = 'DOL'       
Case When Substring(t1.CO_CNTA_EMPR,1,2) In ('12', '42')       
And t1.CO_MONE = 'DOL' Then LEFT(REPLACE(Convert(Varchar,Convert(Numeric(16,2),t1.IM_MVTO_ORIG)), '.', ''),13)      
When Substring(t1.CO_CNTA_EMPR,1,2) Not In ('12', '42')  Then       
LEFT(REPLACE(Convert(Varchar,Convert(Numeric(16,2),Round(t1.IM_MVTO_CNTB/@INFA_CAMB,2))), '.', ''),13)      
Else ''      
End)      
+ '|' + (Case When t1.TI_AUXI_EMPR In ('C', 'P') Then       
Substring(IsNull(t1.CO_AUXI_EMPR, ''),1,18)       
   Else ''      
End)      
+ '|' +       
+ '|' +       
+ '|' + RTRIM(LTRIM(LEFT(IsNull(t1.DE_GLOS,''),50)))      
+ '|'+ '|'      
From #TWASTO_EPBR t1 LEFT OUTER JOIN TMPLAN_ANNO t3 ON (t3.CO_EMPR = t1.CO_EMPR And t3.CO_CNTA_EMPR = t1.CO_CNTA_EMPR)      
Order By t1.CO_OPRC_CNTB,t1.CO_UNID_CNTB,t1.NU_ASTO,t1.NU_SECU,t1.NU_SECU_0001      
      
End      
      
                      
Return                      
/*----------------------------------- Fin ---------------------------------*/     
  



GO
